package com.hsj.aop.jdk;

import com.hsj.aop.annoaop.Add;
import com.hsj.aop.annoaop.AddImpl;

public class JdkStaticProxy implements Add {

    /**
     * jdk静态代理， 就是和要增强的目标类实现同一个接口，把目标对象作为代理对象的属性，然后在所有方法都调用目标对象方法，在方法前后做增强
     * 还是需要写重复代码， 每个需要日志记录的地方都需要添加日志记录
     * 通过实现同一个接口，把目标对象放入代理对象中， 通过给目标方法前后增加功能，然后调用代理对象即可完成功能拓展， 但是问题是代码复用性差
     *   每次要对一个方法进行增强，都需要在代理类中重写方法，并且在方法内调用目标类的方法
     *
     */
    private AddImpl target;
    public JdkStaticProxy(AddImpl target){
        this.target = target;
    }
    @Override
    public int add(int a, int b) {
        System.out.println("日志记录开始，参数是------"+a+","+b);
        int i = target.add(a, b);
        System.out.println("调用方法add");
        System.out.println("日志记录结束，结果是-----"+i);
        return i;
    }

    @Override
    public int sub(int a, int b) {
        System.out.println("日志记录开始，参数是------"+a+","+b);
        int i = target.sub(a, b);
        System.out.println("日志记录结束，结果是-----"+i);
        return i;
    }
}
